=== Version Information === This file was last updated for EyAngband 0.2.0. Make sure to read the newsgroup ("rec.games.roguelike.angband"), and to visit the EyAngband home page (httP://members.nbci.com/eytanz/eyangband) and the Official Angband Home Page ("http://thangorodrim.angband.org") for the most up to date information about EyAngband and Angband in general. EyAngband 0.2.0 has an incredibly complex history, and is the result of a lot of work by a lot of people, all of whom have contributed their time and energy for free, being rewarded only by the pleasure of keeping alive one of the best freeware games available anywhere. The version control files, if they existed, would span more than ten years time, and more than six different primary developers. Without such files, we must rely on simpler methods, such as change logs, source file diffs, and word of mouth. Some of this information is summarized in this file. Please be sure to read the copyright information at the end of this file. === Brief Version History === First came "VMS Moria", by Robert Alan Koeneke (1985). Then came "Umoria" (Unix Moria), by James E. Wilson (1989). Details about the history of the various flavors of "moria", the direct ancestor to Angband, can be found elsewhere, and a note from Robert Alan Koeneke is included in this file. Note that "moria" has been ported to a variety of platforms, and has its own newsgroup, and its own fans. In 1990, Alex Cutler and Andy Astrand, with the help of other students at the University of Warwick, created Angband 1.0, based on the existing code for Umoria 5.2.1. They wanted to expand the game, keeping or even strengthening the grounding in Tolkien lore, while adding more monsters and items, including unique monsters and artifact items, plus activation, pseudo-sensing, level feelings, and special dungeon rooms. Over time, Sean Marsh, Geoff Hill, Charles Teague, and others, worked on the source, releasing a copy known as "Angband 2.4.frog_knows" at some point, which ran only on Unix systems, but which was ported by various people to various other systems. One of the most significant ports was the "PC Angband 1.4" port, for old DOS machines, which added color and various other significant changes, only some of which ever made it back into the official source. Then Charles Swiger (cs4w+@andrew.cmu.edu) took over, sometime in late 1993, cleaning up the code, fixing a lot of bugs, and bringing together various patches from various people, resulting in several versions of Angband, starting with Angband 2.5.1 (?), and leading up to the release of Angband 2.6.1 (and Angband 2.6.2) in late 1994. Some of the changes during this period were based on suggestions from the "net", and from various related games, including "UMoria 5.5", "PC Angband 1.4", and "FAngband". Angband 2.6.1 was primarily targetted towards Unix/NeXT machines, and it required the use of the low level "curses" commands for all screen manipulation and keypress interaction. Each release had to be ported from scratch to any new platforms, normally by creating visual display code that acted as a "curses" emulator. One such port was "Macintosh Angband 2.6.1", by Keith Randall, which added support for color, and which formed the basis for the first release of Angband 2.7.0. During the last half of 1994, I (Ben Harrison) had been playing with the Angband source, primarily to investigate the possibility of making some kind of automatic player for Angband, like the old "rogue-o-matic" program for the game "rogue". The difficulty of compiling a version for the Macintosh, and the complexity of the code, prevented this, and so I began cleaning up the code in various ways for my own personal use. In late 1994, Charles Swiger announced that he was starting a real job and would no longer be able to be the Angband maintainer. This induced some amount of uproar in the Angband community (as represented by the Angband newsgroup), with various people attempting to form "committees" to take over the maintenance of Angband. Since committees have never given us anything but trouble (think "COBOL"), there was very little resistance when, on the first day of 1995, I made my code available, calling it "Angband 2.7.0", and by default, taking over as the new maintainer of Angband. Or, at least, that is how I remember it... Angband 2.7.0 was a very clean (but very buggy) rewrite that, among other things, allowed extremely simple porting to multiple platforms, starting with Unix and Macintosh, and by the time most of the bugs were cleaned up, in Angband 2.7.2, including X11, and various IBM machines. Angband 2.7.4 was released to the "ftp.cis.ksu.edu" site, and quickly gained acceptance, perhaps helped by the OS2 and Windows and Amiga and Linux ports. Angband 2.7.5 and 2.7.6 added important capabilities such as macros and user pref files, and continued to clean up the source. Angband 2.7.8 was released to the major ftp archives as the first "stable" version in a year or so, with new "help files" and "spoiler files" for the "online help", plus a variety of minor tweaks and some new features. After Angband 2.7.8 was released, I created a web site to keep track of all the changes made in each version (though a few may have been missed), and acquired the use of a new develoepement ftp server to supplement the official "mirror" server. This web site is now permanently located at the Official Angband Home Page (http://thangorodrim.angband.org/). Unfortunately, the next six versions were numbered Angband 2.7.9v1 to Angband 2.7.9v6, but really each were rather major updates. Angband 2.8.0 and 2.8.1 were released using a more normal version scheme. Angband 2.8.2 and 2.8.3 add a few random features, clean up some code, and provide graphics support and such for a few more platforms. After the release of Angband 2.8.3 Ben's free time was more and more occupied by his work. He released a beta version of Angband 2.8.5, introducing many new features, but couldn't give as much attention to maintaining the game as he wanted to. So in March 2000, Robert Ruehlmann offered to take over Angband and started to fix the remaining bugs in the Angband 2.8.5 beta. The resulting version has now been released as Angband 2.9.0, which was soon followed by Angband 2.9.1. At that time, I (Eytan Zweig), having just finished teaching myself some basic C skills, decided that the best way to improve them while doing something productive is to develop my own varient. Early changes have consisted mainly of interface fixes, but with later versions came several gameplay changes and more are planned for the future. === Some of the changes between Angband 2.6.1 and Angband 2.7.8 === It is very hard to pin down, along the way from 2.6.2 to 2.7.8, exactly what changes were made, and exactly when they were made. Most releases involved so many changes from the previous release as to make "diff files" not very useful, since often the diff files are as long as the code itself. Most of the changes, with the notable exception of the creation of some of the new "main-xxx.c" files for the various new platforms, and a few other minor exceptions generally noted directly in comments in the source, were written by myself, either spontaneously, or, more commonly, as the result of a suggestion or comment by an Angband player. The most important modification was a massive "code level cleanup" that made all of my other modifications much simpler and safer. This cleanup was so massive that in many places the code is no longer recognizable, for example, via "diff -r", often because it was rewritten from scratch. The second most important modification was the design of a generic "z-term.c" package, which allows Angband to be ported to a new machine with as few as 50 lines of code. Angband 2.7.8 thus runs without modification on many machines, including Macintosh, PowerMac, Unix/X11, Unix/Curses, Amiga, Windows, OS2-386, DOS-386, and even DOS-286. It would be difficult to list all of the changes between Angband 2.6.1 and Angband 2.7.8, because many of them were made in passing during the massive code level cleanup. Many of the changes are invisible to the user, but still provide increased simplicity and efficiency, and decreased code size, or make other more visable changes possible. For example, the new "project()" code that handles all bolts, beams, and balls, the new "update_view()" code that simplifies line of sight computation, or the new "generate()" code that builds new levels in the dungeon. Many changes have been made to increase efficiency, including the new "process_monsters()" and "update_monsters()" functions, and the new "objdes()" and "lite_spot()" routines. The generic "z-term.c" package yielded efficient screen updates, and enabled the efficient use of "color". But anyway, here are a few things that come to mind, in no particular order, and with very little time or effort. Somehow I managed to put off updating this file to the very end, and it will just have to do for now. The recent changes (and bug fixes) can be found at the Official Angband Home Page. color macros keymaps user pref files generic feature array, with template file generic object array, with template file generic artifact array, with template file generic ego-item array, with template file generic monster array, with template fils generic vault array, with template file binary image files for the template files special stat effect tables a special table of spells a special table of options inventory tagging inventory restrictions using objects off the floor various new runtime options the new "destroy" command the new "examine" command the new "note" command the new "dump screen" command the new "load screen" command the new "un-inscribe" command the new "change visuals" command the new "change colors" command the new "change macros" command the new "save game" command the new "fire" vs "throw" commands rearranged equipment slots a standard bow slot an extra inventory slot an underlying keyset refueling torches better monster memory nicer targetting mode object stacking the recall window the choice window the mirror window new high score code special lighting effects intelligent monsters new monster flags text formatting code much cleaner store code generic spell projections scrolls of *identify* maximize mode preserve mode new inscription code new message recall code new spell and prayer code massive cleanup of effects code new object allocation routines powerful (but simple) on line help robust savefile cheat preventers new official cheating options new blindness code new hallucination code optimized object description code new keypress input routines actual object discounts fractional (assymptotic) speed postponing updates/redraws run-time price determination better wizard commands the automatic player launchers of extra shots elemental ignore flags new ego-item types new player ghost creation no more sliding objects no more sliding monsters new object flags new chest trap code regularized the artifact code regularized the ego-item code new monster abilities new monster spell attacks some new store owners run-time skill computation player kills vs anscestor kills better room illumination code better group monster code table access through pointers more redefinable constants slightly new screen layout extreme code cleaning extreme optimizations === A Posting from the Original Author === From: koeneke@ionet.net (Robert Alan Koeneke) Newsgroups: rec.games.roguelike.angband,rec.games.roguelike.moria Subject: Early history of Moria Date: Wed, 21 Feb 1996 04:20:51 GMT I had some email show up asking about the origin of Moria, and its relation to Rogue. So I thought I would just post some text on the early days of Moria. First of all, yes, I really am the Robert Koeneke who wrote the first Moria. I had a lot of mail accussing me of pulling their leg and such. I just recently connected to Internet (yes, I work for a company in the dark ages where Internet is concerned) and was real surprised to find Moria in the news groups... Angband was an even bigger surprise, since I have never seen it. I probably spoke to its originator though... I have given permission to lots of people through the years to enhance, modify, or whatever as long as they freely distributed the results. I have always been a proponent of sharing games, not selling them. Anyway... Around 1980 or 81 I was enrolled in engineering courses at the University of Oklahoma. The engineering lab ran on a PDP 1170 under an early version of UNIX. I was always good at computers, so it was natural for me to get to know the system administrators. They invited me one night to stay and play some games, an early startrek game, The Colossal Cave Adventure (later just 'Adventure'), and late one night, a new dungeon game called 'Rogue'. So yes, I was exposed to Rogue before Moria was even a gleam in my eye. In fact, Rogue was directly responsible for millions of hours of play time wasted on Moria and its descendents... Soon after playing Rogue (and man, was I HOOKED), I got a job in a different department as a student assistant in computers. I worked on one of the early VAX 11/780's running VMS, and no games were available for it at that time. The engineering lab got a real geek of an administrator who thought the only purpose of a computer was WORK! Imagine... Soooo, no more games, and no more rogue! This was intolerable! So I decided to write my own rogue game, Moria Beta 1.0. I had three languages available on my VMS system. Fortran IV, PASCAL V1.?, and BASIC. Since most of the game was string manipulation, I wrote the first attempt at Moria in VMS BASIC, and it looked a LOT like Rogue, at least what I could remember of it. Then I began getting ideas of how to improve it, how it should work differently, and I pretty much didn't touch it for about a year. Around 1983, two things happened that caused Moria to be born in its recognizable form. I was engaged to be married, and the only cure for THAT is to work so hard you can't think about it; and I was enrolled for fall to take an operating systems class in PASCAL. So, I investigated the new version of VMS PASCAL and found out it had a new feature. Variable length strings! Wow... That summer I finished Moria 1.0 in VMS PASCAL. I learned more about data structures, optimization, and just plain programming that summer then in all of my years in school. I soon drew a crowd of devoted Moria players... All at OU. I asked Jimmey Todd, a good friend of mine, to write a better character generator for the game, and so the skills and history were born. Jimmey helped out on many of the functions in the game as well. This would have been about Moria 2.0 In the following two years, I listened a lot to my players and kept making enhancements to the game to fix problems, to challenge them, and to keep them going. If anyone managed to win, I immediately found out how, and 'enhanced' the game to make it harder. I once vowed it was 'unbeatable', and a week later a friend of mine beat it! His character, 'Iggy', was placed into the game as 'The Evil Iggy', and immortalized... And of course, I went in and plugged up the trick he used to win... Around 1985 I started sending out source to other universities. Just before a OU / Texas football clash, I was asked to send a copy to the Univeristy of Texas... I couldn't resist... I modified it so that the begger on the town level was 'An OU football fan' and they moved at maximum rate. They also multiplied at maximum rate... So the first step you took and woke one up, it crossed the floor increasing to hundreds of them and pounded you into oblivion... I soon received a call and provided instructions on how to 'de-enhance' the game! Around 1986 - 87 I released Moria 4.7, my last official release. I was working on a Moria 5.0 when I left OU to go to work for American Airlines (and yes, I still work there). Moria 5.0 was a complete rewrite, and contained many neat enhancements, features, you name it. It had water, streams, lakes, pools, with water monsters. It had 'mysterious orbs' which could be carried like torches for light but also gave off magical aura's (like protection from fire, or aggrivate monster...). It had new weapons and treasures... I left it with the student assistants at OU to be finished, but I guess it soon died on the vine. As far as I know, that source was lost... I gave permission to anyone who asked to work on the game. Several people asked if they could convert it to 'C', and I said fine as long as a complete credit history was maintained, and that it could NEVER be sold, only given. So I guess one or more of them succeeded in their efforts to rewrite it in 'C'. I have since received thousands of letters from all over the world from players telling about their exploits, and from administrators cursing the day I was born... I received mail from behind the iron curtain (while it was still standing) talking about the game on VAX's (which supposedly couldn't be there due to export laws). I used to have a map with pins for every letter I received, but I gave up on that! I am very happy to learn my creation keeps on going... I plan to download it and Angband and play them... Maybe something has been added that will surprise me! That would be nice... I never got to play Moria and be surprised... Robert Alan Koeneke koeneke@ionet.net === Previous Versions (outdated) === VMS Moria Version 4.8 Version 0.1 : 03/25/83 Version 1.0 : 05/01/84 Version 2.0 : 07/10/84 Version 3.0 : 11/20/84 Version 4.0 : 01/20/85 Modules : V1.0 Dungeon Generator - RAK Character Generator - RAK & JWT Moria Module - RAK Miscellaneous - RAK & JWT V2.0 Town Level & Misc - RAK V3.0 Internal Help & Misc - RAK V4.0 Source Release Version - RAK Robert Alan Koeneke Jimmey Wayne Todd Jr. Student/University of Oklahoma Student/University of Oklahoma Umoria Version 5.2 (formerly UNIX Moria) Version 4.83 : 5/14/87 Version 4.85 : 10/26/87 Version 4.87 : 5/27/88 Version 5.0 : 11/2/89 Version 5.2 : 5/9/90 James E. Wilson, U.C. Berkeley wilson@ernie.Berkeley.EDU ...!ucbvax!ucbernie!wilson Other contributors: D. G. Kneller - MSDOS Moria port Christopher J. Stuart - recall, options, inventory, and running code Curtis McCauley - Macintosh Moria port Stephen A. Jacobs - Atari ST Moria port William Setzer - object naming code David J. Grabiner - numerous bug reports, and consistency checking Dan Bernstein - UNIX hangup signal fix, many bug fixes and many others... Copyright (c) 1989 James E. Wilson, Robert A. Keoneke This software may be copied and distributed for educational, research, and not for profit purposes provided that this copyright and statement are included in all such copies. Umoria Version 5.2, patch level 1 Angband Version 2.0 Alex Cutler, Andy Astrand, Sean Marsh, Geoff Hill, Charles Teague. Angband Version 2.4 : 05/09/93 Angband Version 2.5 : 12/05/93 Charles Swiger Angband Version 2.6 : 09/04/94 Charles Swiger Angband Version 2.7 : 01/01/95 Ben Harrison Angband Version 2.8 : 01/01/97 Ben Harrison Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke This software may be copied and distributed for educational, research, and not for profit purposes provided that this copyright and statement are included in all such copies. Other copyrights may also apply. All changes made by Ben Harrison and Robert Ruehlmann are also available under the GNU GENERAL PUBLIC LICENSE. Note that this doesn't influence the current distribution, since parts of the source are still only available under the old Moria/Angband license. Until all parts of Angband are distributed under the GPL the only valid license remains the original Moria/Angband license. === Contributors (incomplete) === Peter Berger, "Prfnoff", Arcum Dagsson, Ed Cogburn, Matthias Kurzke, Ben Harrison, Steven Fuerst, Julian Lighton, Andrew Hill, Werner Baer, Tom Morton, "Cyric the Mad", Chris Kern, Tim Baker, Jurriaan Kalkman, Alexander Wilkins, Mauro Scarpa, John I'anson-Holton, "facade", Dennis van Es, Kenneth A. Strom, Wei-Hwa Huang, Nikodemus, Timo PietilE, Greg Wooledge, Keldon Jones, Shayne Steele, Dr. Andrew White, Musus Umbra